package com.chenfan.mcn.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chenfan.mcn.dao.DocIntentionOrderMapper;
import com.chenfan.mcn.enums.IntentionOrderStatusEnum;
import com.chenfan.common.extension.mybatisplus.enhanced.EnhancedService;
import com.chenfan.mcn.model.*;
import com.chenfan.mcn.model.dto.*;
import com.chenfan.mcn.model.vo.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 意向单 服务类
 * </p>
 *
 * @author lizhejin
 * @since 2022-10-28
 */
public interface DocIntentionOrderService extends EnhancedService<DocIntentionOrderMapper, DocIntentionOrder> {

    /**
     * 新建
     * @param saveDTO
     * @return
     */
    Long add(IntentionOrderSaveDTO saveDTO);

    /**
     * 修改
     * @param saveDTO
     * @return
     */
    Long update(IntentionOrderSaveDTO saveDTO);

    /**
     * 详情
     * @param id
     * @param showTab
     * @return
     */
    IntentionOrderDetailVO detail(Long id,  Boolean showTab);

    /**
     * 批量查看
     * @param idList
     * @return
     */
    List<IntentionOrderDetailVO> batchDetail(List<Long> idList);

    /**
     * 分页查询
     * @param mcnPage
     * @param searchDTO
     * @return
     */
    Page<IntentionOrderListVO> page(McnPage<IntentionOrderListVO> mcnPage, IntentionOrderSearchDTO searchDTO);

    /**
     * 列表导出
     * @param searchDTO
     * @return
     */
    List<IntentionOrderExportVO> export(IntentionOrderSearchDTO searchDTO);

    /**
     * 状态变更
     * @param statusEnum
     * @param id
     * @param confirmDiff
     * @return
     */
    Long changeStatus(IntentionOrderStatusEnum statusEnum, Long id, boolean confirmDiff);

    /**
     * 新建合同
     * @param addContractDTO
     * @return
     */
    Long addContract(IntentionOrderAddContractDTO addContractDTO);

    /**
     * 主播排期
     * @param searchDTO
     * @return
     */
    AnchorSchedulingCalendarVO anchorScheduling(AnchorSchedulingSearchDTO searchDTO);

    /**
     * 意向询单（分页）
     * @param searchDTO
     * @return
     */
    Page<AnchorSchedulingCalendarVO.IntentionOrderData> inquiryPage(AnchorSchedulingSearchDTO searchDTO);

    /**
     * 按状态统计
     * @param searchDTO
     * @return
     */
    IntentionOrderStatusStatisVO getCountByStatus(IntentionOrderSearchDTO searchDTO);

    /**
     * 根据条件获取意向单编号
     * @param size
     * @param likeCode
     * @param searchDTO
     * @return
     */
    List<String> getIntentionOrderCodes(Integer size, String likeCode,IntentionOrderSearchDTO searchDTO);

    /**
     * 获取询单问题
     * @param idList
     * @return
     */
    String getSplicedCodeFromQuestion(List<Long> idList);

    /**
     * 获取询单问题
     * @param id
     * @return
     */
    List<DocIntentionOrderQuestion> getQuestionsById(Long id);

    /**
     * 询单受理
     * @param dto
     * @return
     */
    @Deprecated
    Boolean acceptOrder(IntentionOrderAcceptDTO dto);

    /**
     * 初始化列表里面的发布形式名称信息
     *
     * @param starMap 红人信息MAP
     * @param records 记录信息
     */
    void initRecordPublishFormName(Map<Long, StarPlatInfoVO> starMap, List<ExcutionExportVO> records);

    /**
     * 获取意向单列表查询金额汇总
     * @param searchDTO
     * @return
     */
    IntentionOrderAmountSummaryVO getAmountSummary(IntentionOrderSearchDTO searchDTO);
}
